const express = require('express')
const router = express.Router()

const sysRoleController = require('../controller/SysRoleController')

/**
 * @api {get} /api/v1/role/list 获取角色列表
 * @apiDescription /api/v1/role/list
 * @apiName list
 * @apiGroup SysRole
 * @apiParam {number} [page]         当前页
 * @apiParam {number} [pageSize]     分页大小
 * @apiParam {number} [roleId]      角色id
 * @apiParam {string} [roleName]    角色名称
 * @apiParam {string} [roleKey]     角色权限字符
 * @apiParam {number} [roleSort]    排序
 * @apiParam {number} [dataScope]   数据范围（1：全部数据权限 2：自定数据权限 3：本部门数据权限 4：本部门及以下数据权限）
 * @apiParam {number} [status]       角色状态（0正常 1停用）
 * @apiParam {number} [delFlag]     删除标志（0代表存在 2代表删除）
 * @apiParam {date} [createAt]    创建时间
 * @apiSampleRequest /api/v1/role/list
 * @apiSuccess {number} code 响应状态码
 * @apiSuccess {SysRole[]} data 角色信息
 * @apiSuccessExample {json} Success-Response:
 *  HTTP/1.1 200 OK
 *  {
 *      "code" : 200,
 *      "data" : [
 *        {
            "roleId": 1,
            "roleName": "超级管理员",
            "roleKey": "admin",
            "roleSort": 1,
            "dataScope": "1",
            "status": "0",
            "delFlag": "0",
            "createdBy": "admin",
            "createAt": "23/8/2023 17:16:22",
            "updatedBy": "",
            "updateAt": null,
            "remark": "超级管理员"
          }
 *      ],
 *      "message" : "请求成功",
 *  }
 * @apiVersion v1.0.0
 */
router.get('/list', sysRoleController.roleList)

/**
 * @api {get} /api/v1/role/getRoleIdAndMenuIds 获取角色与菜单关系信息
 * @apiDescription /api/v1/role/getRoleIdAndMenuIds
 * @apiName getRoleIdAndMenuIds
 * @apiGroup SysRoleMenu
 * @apiParam {number} [roleId]      角色id
 * @apiSampleRequest /api/v1/role/getRoleIdAndMenuIds
 * @apiSuccess {number} code 响应状态码
 * @apiSuccess {SysRole[]} data 角色信息
 * @apiSuccessExample {json} Success-Response:
 *  HTTP/1.1 200 OK
 *  {
 *      "code" : 200,
 *      "data" : [
 *        {
            "roleId": 1,
            "menuId": 2
          }
 *      ],
 *      "message" : "请求成功",
 *  }
 * @apiVersion v1.0.0
 */
router.get('/getRoleIdAndMenuIds', sysRoleController.selectRoleIdAndMenuIds)

/**
 * @api {get} /api/v1/role/:id 根据id查询角色信息
 * @apiDescription /api/v1/role/:id
 * @apiName getRoleById
 * @apiGroup SysRole
 * @apiParam {number} id 角色id
 * @apiSampleRequest /api/v1/role/:id
 * @apiSuccess {number} code 响应状态码
 * @apiSuccess {SysRole} data 角色信息
 * @apiSuccessExample {json} Success-Response:
 *  HTTP/1.1 204 OK
 *  {
 *      "code" : 204,
 *      "data" : {
            "roleId": 1,
            "roleName": "超级管理员",
            "roleKey": "admin",
            "roleSort": 1,
            "dataScope": "1",
            "status": "0",
            "delFlag": "0",
            "createdBy": "admin",
            "createAt": "23/8/2023 17:16:22",
            "updatedBy": "",
            "updateAt": null,
            "remark": "超级管理员"
          },
 *      "message" : "删除成功",
 *  }
 * @apiVersion v1.0.0
 */
router.get('/:id', sysRoleController.selectRoleById)

/**
 * @api {post} /api/v1/role/add 添加角色
 * @apiDescription /api/v1/role/add
 * @apiName add
 * @apiGroup SysRole
 * @apiBody {string} [roleName]    角色名称
 * @apiBody {string} [roleKey]     角色权限字符
 * @apiBody {number} [roleSort]    排序
 * @apiBody {number} [dataScope]   数据范围（1：全部数据权限 2：自定数据权限 3：本部门数据权限 4：本部门及以下数据权限）
 * @apiBody {number} [status]       角色状态（0正常 1停用）
 * @apiBody {number} [delFlag]     删除标志（0代表存在 2代表删除）
 * @apiSampleRequest /api/v1/role/add
 * @apiSuccess {number} code 响应状态码
 * @apiSuccess {boolean} data 执行结果
 * @apiSuccessExample {json} Success-Response:
 *  HTTP/1.1 200 OK
 *  {
 *      "code" : 200,
 *      "data" : true,
 *      "message" : "请求成功",
 *  }
 * @apiVersion v1.0.0
 */
router.post('/add', sysRoleController.addRole)

/**
 * @api {put} /api/v1/role/update 更新角色
 * @apiDescription /api/v1/role/update
 * @apiName update
 * @apiGroup SysRole
 * @apiBody {string} roleId        角色id
 * @apiBody {string} roleName      角色名称
 * @apiBody {string} [roleKey]     角色权限字符
 * @apiBody {number} [roleSort]    排序
 * @apiBody {number} dataScope     数据范围（1：全部数据权限 2：自定数据权限 3：本部门数据权限 4：本部门及以下数据权限）
 * @apiBody {number} [status]       角色状态（0正常 1停用）
 * @apiBody {number} [delFlag]     删除标志（0代表存在 2代表删除）
 * @apiSampleRequest /api/v1/role/update
 * @apiSuccess {number} code 响应状态码
 * @apiSuccess {boolean} data 执行结果
 * @apiSuccessExample {json} Success-Response:
 *  HTTP/1.1 200 OK
 *  {
 *      "code" : 200,
 *      "data" : true,
 *      "message" : "请求成功",
 *  }
 * @apiVersion v1.0.0
 */
router.put('/update', sysRoleController.updateRole)


/**
 * @api {delete} /api/v1/role/delete 删除角色
 * @apiDescription /api/v1/role/delete
 * @apiName delete
 * @apiGroup SysRole
 * @apiBody {number} id 角色id
 * @apiSampleRequest /api/v1/role/delete
 * @apiSuccess {number} code 响应状态码
 * @apiSuccess {boolean} data 执行结果
 * @apiSuccessExample {json} Success-Response:
 *  HTTP/1.1 204 OK
 *  {
 *      "code" : 204,
 *      "data" : true,
 *      "message" : "删除成功",
 *  }
 * @apiVersion v1.0.0
 */
router.delete('/delete', sysRoleController.deleteRole)

module.exports = router